home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 66 / data1.cab / Source_Files / Src / Animate.cpp next >
C/C++ Source or Header  |  2000-01-16  |  2KB  |  115 lines

  1. #include "stdafx.h"
  2.  
  3. cAnimatable::cAnimatable(cProperties *_orig) 
  4.         : cDisplayable(_orig) 
  5.     animation = 0;
  6.     looped = FALSE; 
  7. }
  8.  
  9. cAnimatable::~cAnimatable() 
  10.     animation->delete_list(); 
  11. }
  12.  
  13. void cAnimatable::add_image_to_sequence(cImage *image)
  14. {
  15.     if (animation == 0 && current_image_finished())
  16.         set_image(image);
  17.     else
  18.         new cContainer<cImage> (&animation, image);
  19. }
  20.  
  21. void cAnimatable::add_sequence(cAnimation &anim, int _looped)
  22. {
  23.     cImage *i;
  24.     
  25.     looped = _looped;
  26.     last = anim;
  27.     
  28.     for (i = anim.start_frame; i != 0 && i != anim.end_frame; i = (cImage *)i->next)
  29.         add_image_to_sequence(i);
  30.     
  31.     add_image_to_sequence(i);
  32. }
  33.  
  34. void cAnimatable::add_inverse_sequence(cAnimation &anim)
  35. {
  36.     cImage *i;
  37.     
  38.     looped = FALSE;
  39.     last = anim;
  40.     
  41.     for (i = anim.end_frame; i != 0 && i != anim.start_frame; i = (cImage *)i->prev)
  42.         add_image_to_sequence(i);
  43.     
  44.     add_image_to_sequence(i);
  45. }
  46.  
  47. void cAnimatable::add_first_in_sequence(cAnimation &anim)
  48.     looped = FALSE;
  49.     last = anim;
  50.     
  51.     add_image_to_sequence(anim.start_frame);
  52. }
  53.  
  54. void cAnimatable::add_last_in_sequence(cAnimation &anim)
  55.     looped = FALSE;
  56.     last = anim;
  57.     
  58.     add_image_to_sequence(anim.end_frame);
  59. }
  60.  
  61. void cAnimatable::add_sequence(char *anim, int looped)
  62. {
  63.     cAnimation seq;
  64.     
  65.     orig->get_sequence(anim, seq);
  66.     add_sequence(seq, looped);
  67. }
  68.  
  69. void cAnimatable::add_inverse_sequence(char *anim)
  70. {
  71.     cAnimation s;
  72.     
  73.     orig->get_sequence(anim, s);
  74.     add_inverse_sequence(s);
  75. }
  76.  
  77. void cAnimatable::add_last_in_sequence(char *anim)
  78. {
  79.     cAnimation s;
  80.     
  81.     orig->get_sequence(anim, s);
  82.     add_last_in_sequence(s);
  83. }
  84.  
  85. void cAnimatable::add_first_in_sequence(char *anim)
  86. {
  87.     cAnimation s;
  88.     
  89.     orig->get_sequence(anim, s);
  90.     add_first_in_sequence(s);
  91. }
  92.  
  93. int cAnimatable::control()
  94. {   
  95.     if (animation != 0 && current_image_finished())
  96.     {
  97.         // Next frame
  98.         
  99.         set_image(animation->contents);
  100.         delete(animation);
  101.         
  102.         // Do looped animations
  103.         
  104.         if (animation == 0 && looped && last.start_frame != last.end_frame)
  105.             add_sequence(last, TRUE);
  106.     }
  107.  
  108.     return TRUE;
  109. }
  110.  
  111.